﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using RESTVeterinariaServices.Dominio;
using System.Data.SqlClient;
using System.ServiceModel;

namespace RESTVeterinariaServices.Persistencia
{
    public class ClienteDAO
    {
        public Cliente Crear(Cliente objACrear)
        {
            Cliente ObjCreado = null;
            try
            {
                int Pk = 0;
                using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
                {
                    string query = "SELECT isnull(MAX(IdCliente)+1,1) FROM Cliente";
                    using (SqlCommand sentencia = new SqlCommand(query, con))
                    {
                        Pk = (int)sentencia.ExecuteScalar();
                    }
                }

                using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
                {
                    string query = "INSERT INTO Cliente VALUES(@idCliente,@txtClienteNombre,@txtClienteApellido,@NumDocumento,@Activo)";
                    objACrear.idCliente = Pk;
                    using (SqlCommand com = new SqlCommand(query, con))
                    {
                        com.Parameters.Add(new SqlParameter("@idCliente", objACrear.idCliente));
                        com.Parameters.Add(new SqlParameter("@txtClienteNombre", objACrear.txtClienteNombre));
                        com.Parameters.Add(new SqlParameter("@txtClienteApellido", objACrear.txtClienteApellido));
                        com.Parameters.Add(new SqlParameter("@NumDocumento", objACrear.NumDocumento));
                        com.Parameters.Add(new SqlParameter("@Activo", objACrear.Activo));
                        com.ExecuteNonQuery();
                    }
                }
                ObjCreado = obtener(objACrear.idCliente.ToString());
                return ObjCreado;
            }

            catch (Exception ex)
            {
                throw ex;
            }
        }

        public Cliente obtener(string strPk)
        {
            try
            {
                Cliente objEncontrado = null;
                string sql = "Select ";
                sql = sql + "cl.idCliente,cl.txtClienteNombre,cl.txtClienteApellido,cl.NumDocumento,cl.Activo ";
                sql = sql + "from Cliente cl ";
                sql = sql + "WHERE idCliente=@idCliente";

                using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
                {
                    con.Open();
                    using (SqlCommand com = new SqlCommand(sql, con))
                    {
                        com.Parameters.Add(new SqlParameter("@idCliente", strPk));
                        using (SqlDataReader res = com.ExecuteReader())
                        {
                            if (res.Read())
                            {
                                objEncontrado = new Cliente()
                                {
                                    idCliente = (int)res["idCliente"]
                                    ,
                                    txtClienteNombre = (string)res["txtClienteNombre"]
                                    ,
                                    txtClienteApellido = (string)res["txtClienteApellido"]
                                    ,
                                    NumDocumento = (string)res["NumDocumento"]
                                    ,
                                    Activo = (bool)res["Activo"]
                                };
                            }
                        }
                    }
                }
                return objEncontrado;
            }

            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<Cliente> ListarTodos()
        {
            try
            {
                List<Cliente> list = new List<Cliente>();
                string sql = "Select ";
                sql = sql + "cl.idCliente,cl.txtClienteNombre,cl.txtClienteApellido,cl.NumDocumento,cl.Activo ";
                sql = sql + "from Cliente cl where cl.Activo=1";

                using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
                {
                    con.Open();
                    using (SqlCommand com = new SqlCommand(sql, con))
                    {
                        using (SqlDataReader res = com.ExecuteReader())
                        {
                            while (res.Read())
                            {
                                Cliente c = new Cliente()
                                {
                                    idCliente = (int)res["idCliente"],
                                    txtClienteNombre = (string)res["txtClienteNombre"],
                                    txtClienteApellido = (string)res["txtClienteApellido"],
                                    NumDocumento = (string)res["NumDocumento"],
                                    Activo = (bool)res["Activo"]
                                };
                                list.Add(c);
                            }
                        }
                    }
                }
                return list;
            }

            catch (Exception ex)
            {
                throw ex;
            }
        }

        public Cliente Modificar(Cliente objAModificar)
        {
            Cliente objModificado = null;
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                string sql = "UPDATE Cliente SET ";
                sql = sql + "txtClienteNombre = @txtClienteNombre, ";
                sql = sql + "txtClienteApellido = @txtClienteApellido, ";
                sql = sql + "NumDocumento = @NumDocumento, ";
                sql = sql + "Activo = @Activo ";
                sql = sql + "WHERE idCliente  = @idCliente";
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@idCliente", objAModificar.idCliente));
                    com.Parameters.Add(new SqlParameter("@txtClienteNombre", objAModificar.txtClienteNombre));
                    com.Parameters.Add(new SqlParameter("@txtClienteApellido", objAModificar.txtClienteApellido));
                    com.Parameters.Add(new SqlParameter("@NumDocumento", objAModificar.NumDocumento));
                    com.Parameters.Add(new SqlParameter("@Activo", objAModificar.Activo));
                    com.ExecuteNonQuery();
                }
            }
            objModificado = obtener(objAModificar.idCliente.ToString());
            return objModificado;
        }
    }
}